﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Linq;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using VNPT.DoiSoat.DoiSoat;

namespace VNPT.DoiSoat.BaoCao
{
    public partial class uBC_TH_GTGT_BC_NAM : Core.uBase
    {
        public uBC_TH_GTGT_BC_NAM()
        {
            InitializeComponent();
        }
        int thang = DateTime.Now.Month;
        int nam = DateTime.Now.Year;
        List<Data.BaoCao.BC_DVGTGT_DLK_BC_NAM> li = new List<Data.BaoCao.BC_DVGTGT_DLK_BC_NAM>();
        List<Data.BaoCao.BC_DVGTGT_DLK_BC_NAM_Group> li_gr = new List<Data.BaoCao.BC_DVGTGT_DLK_BC_NAM_Group>();
        
        private void KhoiTaoDS()
        {
            //'GPC','VMS','VTLMOBI','SPTSFONE','HTCMOBI','GTLMOBI'
            li.Clear();
            li_gr.Clear();
            li.Add(new Data.BaoCao.BC_DVGTGT_DLK_BC_NAM()
            {
                MaMang = "GPC",
                Loai = "DD"
            });
            li.Add(new Data.BaoCao.BC_DVGTGT_DLK_BC_NAM()
            {
                MaMang = "VMS",
                Loai = "DD"
            });
            li.Add(new Data.BaoCao.BC_DVGTGT_DLK_BC_NAM()
            {
                MaMang = "VTLMOBI",
                Loai = "DD"
            });
            li.Add(new Data.BaoCao.BC_DVGTGT_DLK_BC_NAM()
            {
                MaMang = "SPTSFONE",
                Loai = "DD"
            });
            li.Add(new Data.BaoCao.BC_DVGTGT_DLK_BC_NAM()
            {
                MaMang = "HTCMOBI",
                Loai = "DD"
            });
            li.Add(new Data.BaoCao.BC_DVGTGT_DLK_BC_NAM()
            {
                MaMang = "GTLMOBI",
                Loai = "DD"
            });

            //cố định
            li.Add(new Data.BaoCao.BC_DVGTGT_DLK_BC_NAM()
            {
                MaMang = "VNPT_DLK",
                Loai = "CD"
            });
            li.Add(new Data.BaoCao.BC_DVGTGT_DLK_BC_NAM()
            {
                MaMang = "VNPT_LIENTINH",
                Loai = "CD"
            });
            li.Add(new Data.BaoCao.BC_DVGTGT_DLK_BC_NAM()
            {
                MaMang = "DNK_DLK",
                Loai = "CD"
            });
            li.Add(new Data.BaoCao.BC_DVGTGT_DLK_BC_NAM()
            {
                MaMang = "DNK_LIENTINH",
                Loai = "CD"
            });
        }

        protected override void OnLoad(EventArgs e)
        {
            KhoiTaoDS();
            base.OnLoad(e);
        }
        private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
        {

        }

        private void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {

        }

        private void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {

        }

        private void btnXem_Click(object sender, EventArgs e)
        {
            using (var dlg= new DevExpress.Utils.WaitDialogForm("Đang tính toán thành tiền..."))
            {

            var dt_tien = DbServer.GetDataTable(string.Format(DoiSoatSetting.SQL_BAOCAO_TH_GTGT_NAM_TIEN, thang, nam));
            dlg.SetCaption("Đang tính toán số liệu phút và cuộc...");
            var dt = DbServer.GetDataTable(string.Format(DoiSoatSetting.SQL_BAOCAO_TH_GTGT_NAM, thang, nam));
            dlg.SetCaption("Đang thiết lập dữ liệu khác...");
           
                #region Tinh phut va cuoc
            foreach (var item in dt.Rows)
            {
                var row = (DataRow)item;
                var loai = (row["LOAI"] ?? "").ToString();
                var maMang = (row["MA_MANG"] ?? "").ToString();
                var dv = (row["DV"] ?? "").ToString();

                int _out = 0;
                int.TryParse((row["PHUT"] ?? "").ToString(), out _out);
                var phut = _out;
                int.TryParse((row["CUOC"] ?? "").ToString(), out _out);
                var cuoc = _out;

                if (li.Where(p => p.MaMang == maMang).Any())
                {
                    var t = li.Where(p => p.MaMang == maMang).First();
                    switch (dv)
                    {
                        case "DV800126":
                            t.Phut_800126 = phut;
                            t.Cuoc_800126 = cuoc;
                            break;
                        case "DV1088":
                            t.Phut_1088 = phut;
                            t.Cuoc_1088 = cuoc;
                            break;
                        case "DV1080":
                            t.Phut_1080 = phut;
                            t.Cuoc_1080 = cuoc;
                            break;
                        case "DV801":
                            t.Phut_801 = phut;
                            t.Cuoc_801 = cuoc;
                            break;
                        case "DV119":
                            t.Phut_119 = phut;
                            t.Cuoc_119 = cuoc;
                            break;
                        case "DV116":
                            t.Phut_116 = phut;
                            t.Cuoc_116 = cuoc;
                            break;
                        default:
                            break;
                    }
                }
            }

            var t_phut_dd_800126 = li.Where(p => p.Loai == "DD").Sum(p => p.Phut_800126);
            var t_phut_dd_801 = li.Where(p => p.Loai == "DD").Sum(p => p.Phut_801);
            var t_phut_dd_1088 = li.Where(p => p.Loai == "DD").Sum(p => p.Phut_1088);
            var t_phut_dd_1080 = li.Where(p => p.Loai == "DD").Sum(p => p.Phut_1080);
            var t_phut_dd_116 = li.Where(p => p.Loai == "DD").Sum(p => p.Phut_116);
            var t_phut_dd_119 = li.Where(p => p.Loai == "DD").Sum(p => p.Phut_119);

            var t_cuoc_dd_800126 = li.Where(p => p.Loai == "DD").Sum(p => p.Cuoc_800126);
            var t_cuoc_dd_801 = li.Where(p => p.Loai == "DD").Sum(p => p.Cuoc_801);
            var t_cuoc_dd_1088 = li.Where(p => p.Loai == "DD").Sum(p => p.Cuoc_1088);
            var t_cuoc_dd_1080 = li.Where(p => p.Loai == "DD").Sum(p => p.Cuoc_1080);
            var t_cuoc_dd_116 = li.Where(p => p.Loai == "DD").Sum(p => p.Cuoc_116);
            var t_cuoc_dd_119 = li.Where(p => p.Loai == "DD").Sum(p => p.Cuoc_119);
            //===
            var t_phut_cd_800126 = li.Where(p => p.Loai == "CD").Sum(p => p.Phut_800126);
            var t_phut_cd_801 = li.Where(p => p.Loai == "CD").Sum(p => p.Phut_801);
            var t_phut_cd_1088 = li.Where(p => p.Loai == "CD").Sum(p => p.Phut_1088);
            var t_phut_cd_1080 = li.Where(p => p.Loai == "CD").Sum(p => p.Phut_1080);
            var t_phut_cd_116 = li.Where(p => p.Loai == "CD").Sum(p => p.Phut_116);
            var t_phut_cd_119 = li.Where(p => p.Loai == "CD").Sum(p => p.Phut_119);

            var t_cuoc_cd_800126 = li.Where(p => p.Loai == "CD").Sum(p => p.Cuoc_800126);
            var t_cuoc_cd_801 = li.Where(p => p.Loai == "CD").Sum(p => p.Cuoc_801);
            var t_cuoc_cd_1088 = li.Where(p => p.Loai == "CD").Sum(p => p.Cuoc_1088);
            var t_cuoc_cd_1080 = li.Where(p => p.Loai == "CD").Sum(p => p.Cuoc_1080);
            var t_cuoc_cd_116 = li.Where(p => p.Loai == "CD").Sum(p => p.Cuoc_116);
            var t_cuoc_cd_119 = li.Where(p => p.Loai == "CD").Sum(p => p.Cuoc_119);

            foreach (var item in li)
            {
                if (item.Loai == "DD")
                {
                    item.Cuoc_800126_PT = (item.Cuoc_800126 / t_cuoc_dd_800126) * 100;
                    item.Phut_800126_PT = (item.Phut_800126 / t_phut_dd_800126) * 100;

                    item.Cuoc_1088_PT = (item.Cuoc_1088 / t_cuoc_dd_1088) * 100;
                    item.Phut_1088_PT = (item.Phut_1088 / t_phut_dd_1088) * 100;

                    item.Cuoc_1080_PT = (item.Cuoc_1080 / t_cuoc_dd_1080) * 100;
                    item.Phut_1080_PT = (item.Phut_1080 / t_phut_dd_1080) * 100;

                    item.Cuoc_801_PT = (item.Cuoc_801 / t_cuoc_dd_801) * 100;
                    item.Phut_801_PT = (item.Phut_801 / t_phut_dd_801) * 100;

                    item.Cuoc_116_PT = (item.Cuoc_116 / t_cuoc_dd_116) * 100;
                    item.Phut_116_PT = (item.Phut_116 / t_phut_dd_116) * 100;

                    item.Cuoc_119_PT = (item.Cuoc_119 / t_cuoc_dd_119) * 100;
                    item.Phut_119_PT = (item.Phut_119 / t_phut_dd_119) * 100;
                }
                else
                {
                    item.Cuoc_800126_PT = (item.Cuoc_800126 / t_cuoc_cd_800126) * 100;
                    item.Phut_800126_PT = (item.Phut_800126 / t_phut_cd_800126) * 100;

                    item.Cuoc_1088_PT = (item.Cuoc_1088 / t_cuoc_cd_1088) * 100;
                    item.Phut_1088_PT = (item.Phut_1088 / t_phut_cd_1088) * 100;

                    item.Cuoc_1080_PT = (item.Cuoc_1080 / t_cuoc_cd_1080) * 100;
                    item.Phut_1080_PT = (item.Phut_1080 / t_phut_cd_1080) * 100;

                    item.Cuoc_801_PT = (item.Cuoc_801 / t_cuoc_cd_801) * 100;
                    item.Phut_801_PT = (item.Phut_801 / t_phut_cd_801) * 100;

                    item.Cuoc_116_PT = (item.Cuoc_116 / t_cuoc_cd_116) * 100;
                    item.Phut_116_PT = (item.Phut_116 / t_phut_cd_116) * 100;

                    item.Cuoc_119_PT = (item.Cuoc_119 / t_cuoc_cd_119) * 100;
                    item.Phut_119_PT = (item.Phut_119 / t_phut_cd_119) * 100;
                }
            }
            #endregion

           // Phần xử lý tiền.....................
          #region Tinh tien

            foreach (var item in dt_tien.Rows)
            {
                var row = (DataRow)item;
                var maMang = (row["MA_MANG"] ?? "").ToString();
                var dv = (row["DV"] ?? "").ToString();

                double _out = 0;
                double.TryParse((row["TIEN"] ?? "0").ToString(), out _out);
                var tien = _out;
                if (li.Where(p => p.MaMang == maMang).Any())
                {
                    var t = li.Where(p => p.MaMang == maMang).First();
                    switch (dv)
                    {
                        case "DV1088":
                            t.Tien_1088 = tien;
                            break;
                        case "DV1080":
                            t.Tien_1080 = tien;
                            break;
                        case "DV801":
                            t.Tien_801 = tien;
                            break;
                        default:
                            break;
                    }
                }
                
            }
            #endregion
            }
            myGridControl.DataSource = li;
        }

        private void btnPrint_Click(object sender, EventArgs e)
        {
            var DNK_ENV_5002x = 0;
            var DNK_VTL_5006x = 0;
            using (var dlg = new DevExpress.Utils.WaitDialogForm("Đang tính toán..."))
            {
                var dt = DbServer.GetDataTable(string.Format(DoiSoatSetting.SQL_BAOCAO_TH_GTGT_NAM_THUEBAO, thang, nam));
                if (dt.Rows.Count != 2)
                {
                    DevExpress.XtraEditors.XtraMessageBox.Show("Dữ liệu lấy về không chính xác, vui lòng kiểm tra lại");
                    return;
                }

                foreach (var item in dt.Rows)
                {
                    var row = (DataRow)item;
                    var Loai = (row["LOAI"] ?? "").ToString();
                    var TBao = int.Parse((row["TBAO"] ?? "0").ToString());
                    switch (Loai)
                    {
                        case "DNK_ENV_5002x":
                            DNK_ENV_5002x = TBao;
                            break;
                        case "DNK_VTL_5006x":
                            DNK_VTL_5006x = TBao;
                            break;
                        default:
                            break;
                    }
                }


                li_gr = (from p in li
                         group p by p.Loai into g
                         select new Data.BaoCao.BC_DVGTGT_DLK_BC_NAM_Group()
                         {
                             DS = g.ToList(),
                             Loai = g.First().Loai
                         }).ToList();
            }
            new VNPT.Report.Reporter().Print_SanLuongGTGT_DLK(li_gr, DNK_ENV_5002x, DNK_VTL_5006x,thang,nam);
        }

        

        private void comboBoxEdit1_SelectedIndexChanged(object sender, EventArgs e)
        {
            thang = int.Parse(comboBoxEdit1.Text);
        }

        private void comboBoxEdit2_SelectedIndexChanged(object sender, EventArgs e)
        {
            nam = int.Parse(comboBoxEdit2.Text);
        }

        private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            new fEditSQL("SQL_BAOCAO_TH_GTGT_NAM",
                "Lấy số cuộc, phút gọi vào các dịch vụ 108, 801 ,116, 119",
                "Các tham số {0}= Năm, {1:D2}= Tháng").ShowDialog();
        }

        private void barButtonItem2_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            new fEditSQL("SQL_BAOCAO_TH_GTGT_NAM_TIEN",
               "Lấy số cuộc, phút gọi vào các dịch vụ 108, 801 ,116, 119",
               "Các tham số {0}= Năm, {1:D2}= Tháng").ShowDialog();
        }

        private void barButtonItem3_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            new fEditSQL("SQL_BAOCAO_TH_GTGT_NAM_THUEBAO",
              "Lấy số lượng thuê bao của DNK đang hoạt động",
              "Các tham số {0}= Năm, {1:D2}= Tháng").ShowDialog();
        }

        private void btnExp_Click(object sender, EventArgs e)
        {
            new VNPT.Utility.Grid.GridExport().Export(myGridControl);
        }
    }
}
